unit clsProdutoEntidade;

interface

uses Dm, dbtables, biblio;

type
  TProdutoEntidade = class(TObject)
  public
    Pro_codigo: string; //codigo do produto
    Pre_codigo_entidade: string; //codigo do produto nesta tabela
    Pre_Descricao: string; // descricao da entidade
    Pre_medida: string; // exemplo 12x10 mm.
    Pre_unidade: double; // tamanho da chapa em medida
    Pre_custo: double; // custo do produto unitario
    Pre_saldo: double; // saldo do produto por fornecedor
    Pre_Uniref: string; // conversao de medidas
    pre_saldopendente: double;
    function Gravar(p_ent_codigo, P_Pre_codigo_entidade: string): Byte;
    function Recuperar(p_ent_codigo, P_Pre_codigo_entidade: string): Byte;
    function Excluir(P_ent_codigo, P_Pre_codigo_entidade: string): Byte;
    procedure Consultar(var p_q: TQuery; p_Ent_codigo, p_pro_codigo: string);
    procedure ConsultarPorCliente(var p_q: TQuery; p_Ent_codigo: string);
    function Recuperar_Prod(P_ent_codigo, P_Pro_codigo: string): Byte;
    procedure Consulta_Produto(var p_q: TQuery; p_Ent_codigo, descricao: string);
    procedure Tira_Saldo(p_ent_codigo, p_Pro_codigo: string; qtde: double);
    procedure Adiciona_Saldo(p_ent_codigo, p_Pro_codigo: string; qtde: double);
    procedure Atualiza_Compra(Entidade, cod_prod: string; custo: Double);
    function RecuperaDescricao(pEntidade, pProduto: string): string;
    function RecuperaCodigo(pEntidade, pProduto: string): string;
  end;

implementation

uses clsProduto;

{ TProdutoEntidade }

procedure TProdutoEntidade.Consultar;
begin
  p_q.sql.Clear;
  p_q.Params.Clear;
  p_q.sql.add('Select * FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and ' +
    'pro_codigo=:k_pro_codigo');
  p_q.parambyname('k_ent_codigo').asstring := P_Ent_codigo;
  p_q.parambyname('k_pro_codigo').asstring := P_pro_codigo;
end;

procedure TProdutoEntidade.ConsultarPorCliente;
begin
  p_q.sql.Clear;
  p_q.Params.Clear;
  p_q.sql.add('select produto.pro_codigo,produto.pro_nome,PRE_CODIGO_ENTIDADE,PRE_DESCRICAO ' +
    'from Produto, produtoentidade,entidade ' +
    'where entidade.ent_codigo =:K_ent_codigo and ' +
    'entidade.ent_codigo = produtoentidade.ent_codigo and ' +
    ' produtoentidade.pro_codigo = produto.pro_codigo');
  p_q.parambyname('k_ent_codigo').asstring := P_Ent_codigo;
end;

function TProdutoEntidade.Excluir;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := dmint.db.databasename;
  tq.active := False;
  tq.sql.Clear;
  tq.params.clear;
  tq.sql.add('delete FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and Pre_codigo_entidade=:k_Pre_codigo_entidade');
  tq.parambyname('k_ent_codigo').asstring := P_Ent_codigo;
  tq.parambyname('k_Pre_codigo_entidade').asstring := p_pre_codigo_entidade;
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;
end;

function TProdutoEntidade.Gravar;
var
  tq: TQuery;
begin
  tq := TQuery.Create(dm.DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and Pre_codigo_entidade=:k_Pre_codigo_entidade');
  tq.parambyname('k_ent_codigo').asstring := P_Ent_codigo;
  tq.parambyname('k_Pre_codigo_entidade').asstring := p_pre_codigo_entidade;
  tq.open;
  if tq.eof then begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('INSERT INTO ProdutoEntidade(ent_codigo,Pre_codigo_entidade,Pro_codigo,pre_descricao,pre_medida, ' +
      'pre_unidade,pre_custo,pre_saldo,pre_uniref,pre_saldopendente) ' +
      'VALUES(:k_ent_codigo,' +
      ':k_Pre_codigo_entidade,' +
      ':k_Pro_codigo,' +
      ':K_pre_descricao,' +
      ':k_pre_medida,' +
      ':k_pre_unidade,' +
      ':k_pre_custo,' +
      ':k_pre_saldo,' +
      ':k_pre_uniref,' +
      ':k_pre_saldopendente)');
  end else begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('UPDATE ProdutoEntidade SET ' +
      'pro_codigo       =:k_Pro_codigo,' +
      'Pre_Descricao    =:K_pre_descricao,' +
      'Pre_medida       =:k_pre_medida,' +
      'Pre_unidade      =:k_pre_unidade,' +
      'Pre_custo        =:k_pre_custo,' +
      'Pre_saldo        =:k_pre_saldo,' +
      'Pre_Uniref       =:k_pre_uniref,' +
      'pre_saldopendente=:k_pre_saldopendente ' +
      'WHERE Ent_codigo=:k_ent_codigo and Pre_codigo_entidade=:k_Pre_codigo_entidade');
  end;
  tq.parambyname('k_ent_codigo').asstring := P_ent_codigo;
  tq.parambyname('k_Pro_codigo').asstring := Pro_codigo;
  tq.parambyname('k_Pre_codigo_entidade').asstring := P_Pre_codigo_entidade;
  tq.parambyname('K_pre_descricao').asstring := Pre_Descricao;
  tq.parambyname('k_pre_medida').asstring := Pre_medida;
  tq.parambyname('k_pre_unidade').AsFloat := Pre_unidade;
  tq.parambyname('k_pre_custo').AsFloat := Pre_custo;
  tq.parambyname('k_pre_saldo').AsFloat := Pre_saldo;
  tq.parambyname('k_pre_uniref').asstring := Pre_Uniref;
  tq.parambyname('k_pre_saldopendente').AsFloat := Pre_saldopendente;
  tq.close;
  tq.execsql;
  result := 1;
  tq.close;
  tq.Free;
end;

function TProdutoEntidade.Recuperar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dm.dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and Pre_codigo_entidade=:k_Pre_codigo_entidade');
  tq.parambyname('k_ent_codigo').asstring := strzero(P_Ent_codigo, 5);
  tq.parambyname('k_Pre_codigo_entidade').asstring := p_pre_codigo_entidade;
  tq.open;

  if tq.eof then begin
    Result := 0;
  end else begin
    Result := 1;
  end;

  Pro_codigo := tq.fieldbyname('pro_codigo').AsString;
  Pre_Descricao := tq.fieldbyname('pre_descricao').AsString;
  Pre_medida := tq.fieldbyname('pre_medida').AsString;
  Pre_unidade := tq.fieldbyname('Pre_unidade').AsFloat;
  Pre_custo := tq.fieldbyname('Pre_custo').AsFloat;
  Pre_saldo := tq.fieldbyname('Pre_saldo').AsFloat;
  Pre_Uniref := tq.fieldbyname('Pre_Uniref').AsString;
  Pre_saldopendente := tq.fieldbyname('Pre_saldopendente').AsFloat;
  tq.Close;
  tq.Free;

end;

function TProdutoEntidade.Recuperar_Prod;
var
  tq: TQuery;
begin
  tq := TQuery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and pro_codigo=:k_Pro_codigo');
  tq.parambyname('k_ent_codigo').asstring := strzero(P_Ent_codigo, 5);
  tq.parambyname('k_Pro_codigo').asstring := P_Pro_codigo;
  tq.open;
  if tq.eof then Result := 0 else Result := 1;
  Pre_codigo_entidade := tq.fieldbyname('Pre_codigo_entidade').AsString;
  Pre_Descricao := tq.fieldbyname('pre_descricao').AsString;
  Pre_Unidade := tq.fieldbyname('pre_unidade').Asfloat;
  tq.Close;
  tq.Free;
end;

procedure TProdutoEntidade.Consulta_Produto;
begin
  p_q.sql.Clear;
  p_q.Params.Clear;
  p_q.sql.add('Select * FROM ProdutoEntidade where Ent_codigo=:k_ent_codigo and ' +
    'pre_descricao>=:k_descricao');
  p_q.parambyname('k_ent_codigo').asstring := P_Ent_codigo;
  if descricao <> '' then
    p_q.parambyname('k_descricao').asstring := descricao
  else
    p_q.parambyname('k_descricao').asstring := ' ';
end;

procedure TProdutoEntidade.Tira_Saldo;
var
  tq: TQuery;
  saldo_ant: double;
  pend_ant: double;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM ProdutoEntidade where Ent_Codigo=:a and Pro_codigo=:b');
  tq.Params[0].asstring := p_Ent_codigo;
  tq.Params[1].asstring := p_Pro_codigo;
  tq.open;
  saldo_ant := tq.fieldbyname('pre_saldo').asfloat;
  pend_ant := tq.fieldbyname('pre_saldopendente').asfloat;
  tq.close;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('Update ProdutoEntidade set pre_saldo=:a,pre_saldopendente=:b where ' +
    'Ent_Codigo=:c and Pro_codigo=:d');
  tq.Params[0].asfloat := saldo_ant - qtde;
  tq.Params[1].asfloat := pend_ant + qtde;
  tq.Params[2].asstring := p_Ent_codigo;
  tq.Params[3].asstring := p_Pro_codigo;
  tq.execsql;
  tq.close;
  tq.free;
end;

procedure TProdutoEntidade.Adiciona_Saldo;
var
  tq: TQuery;
  saldo_ant: double;
  pend_ant: double;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM ProdutoEntidade where Ent_Codigo=:a and Pro_codigo=:b');
  tq.Params[0].asstring := p_Ent_codigo;
  tq.Params[1].asstring := p_Pro_codigo;
  tq.open;
  saldo_ant := tq.fieldbyname('pre_saldo').asfloat;
  pend_ant := tq.fieldbyname('pre_saldopendente').asfloat;
  tq.close;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('Update ProdutoEntidade set pre_saldo=:a,pre_saldopendente=:b where ' +
    'Ent_Codigo=:c and Pro_codigo=:d');
  tq.Params[0].asfloat := saldo_ant + qtde;
  tq.Params[1].asfloat := pend_ant - qtde;
  tq.Params[2].asstring := p_Ent_codigo;
  tq.Params[3].asstring := p_Pro_codigo;
  tq.execsql;
  tq.close;
  tq.free;
end;

procedure TProdutoEntidade.Atualiza_Compra;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('Update ProdutoEntidade set pre_custo=:a where Pro_codigo=:b');
  tq.Params[0].asfloat := custo;
  tq.Params[1].asstring := cod_prod;
  tq.execsql;
  tq.close;
  tq.free;
end;

function TProdutoEntidade.RecuperaDescricao(pEntidade,
  pProduto: string): string;
var
  Produto: TProduto;
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.Params.Clear;
  tq.sql.add('SELECT Pre_Descricao FROM ProdutoEntidade where Ent_Codigo=:a and Pro_codigo=:b');
  tq.Params[0].asstring := pEntidade;
  tq.Params[1].asstring := pProduto;
  tq.open;
  if (tq.Eof) or (tq.FieldByName('Pre_Descricao').AsString = '') then begin
    Produto := TProduto.Create;
    Produto.Recuperar(pProduto);
    Result := Produto.Pro_nome;
    Produto.Free;
  end else
    Result := tq.FieldByName('Pre_Descricao').AsString;
  tq.Close;
  tq.Free;
end;

function TProdutoEntidade.RecuperaCodigo(pEntidade,
  pProduto: string): string;
var
  Produto: TProduto;
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.Params.Clear;
  tq.sql.add('SELECT Pre_codigo_entidade FROM ProdutoEntidade where Ent_Codigo=:a and Pro_codigo=:b');
  tq.Params[0].asstring := pEntidade;
  tq.Params[1].asstring := pProduto;
  tq.open;
  if (tq.Eof) or (tq.FieldByName('Pre_codigo_entidade').AsString = '') then begin
    Produto := TProduto.Create;
    Produto.Recuperar(pProduto);
    Result := Produto.xPro_Codigo;
    Produto.Free;
  end else
    Result := tq.FieldByName('Pre_codigo_entidade').AsString;
  tq.Close;
  tq.Free;
end;

end.
